﻿/*
    AUFGABENSTELLUNG ("große Straße" beim Kniffel-Spiel)

        - Führen Sie bitte zunächst im Main ein Integer-Array der Länge 5 ein
        - Schreiben Sie anschließend bitte die beiden folgenden Methoden:
            a) Funktionsname: FülleWürfelArray
               Übergabewerte: 1 Integer-Array 'arr' 
                              2 Integer 'min' und 'max'
               Funktion:      Die Methode füllt das Array arr mit Zufallszahlen zwischen (beiderseits einschließlich) min und max
                              (HINWEIS: Länge des Arrays = arr.Length)
               Rückgabewert:  Keiner

            b) Funktionsname: AusgabeWürfelArray
               Übergabewerte: 1 Integer-Array 'arr'
               Funktion:      Ausgabe aller Arrayfeld-Werte (also für alle Indices zwischen 0 und arr.Length) auf der Konsole
               Rückgabewert:  Keiner

       Verwenden Sie bitte die beiden obigen Methoden in folgendem C#-Programm - für dieses Programm soll gelten:
            - Das Programm startet eine Schleife, pro Durchlauf ...
                + wird ein Array der Länge 5 mit Zufalls-Würfelzahlen gefüllt
                + wird das gefüllte Array (numerisch) sortiert
                + wird überprüft, ob es sich um eine "große Straße" handelt (1,2,3,4,5) oder (2,3,4,5,6)
            - Die Schleife endet, falls eine "große Straße" gewürfelt wurde
            - Das Programm endet mit der Ausgabe der Anzahl der Schleifen-Durchläufe, die nötig waren, um die "große Straße" zu erreichen
*/

using System;

namespace Lösungen
{
    class Program
    {
        private static readonly Random random = new Random();
        public static void FülleWürfelArray(int[] arr, int min, int max)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = random.Next(min, max + 1);
            }
        }

        public static void AusgabeWürfelArray(int[] arr)
        {
            foreach (int zahl in arr)
                Console.Write(zahl + " ");
            Console.WriteLine();
        }

        // Es handelt sich um eine Zahlenfolge, wenn die Differenz zur nächsten Zahl genau 1 beträgt.
        public static bool PrüfeGroßeStraße(int[] zahlen)
        {
            for (int i = 0; i < zahlen.Length - 1; i++)
            {
                // Sobald die Differenz nicht genau 1 ist, ist es keine Zahlenfolge und es kann false zurückgegeben werden
                if (zahlen[i + 1] - zahlen[i] != 1)
                    return false;
            }
            return true;
        }

        public static void Main(String[] args)
        {
            int i = 1;

            do //Variante 2
            {
                int[] zahlen = new int[5];
                FülleWürfelArray(zahlen, 1, 6);
                Array.Sort(zahlen);

                // In PrüfeGroßeStraße wird die Differenz zu jeder nächsten Zahl errechnet.
                // Ist die Differenz ungleich 1, handelt es sich nicht um eine Zahlenfolge.
                if (PrüfeGroßeStraße(zahlen))
                {
                    AusgabeWürfelArray(zahlen);
                    Console.WriteLine(" - Große Straße! Versuche: " + i);

                    break;
                }
                i++;
            } while (true);
        }

    }
}